package ru.tennisworld.user.controller;

import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import jakarta.validation.constraints.NotNull;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import ru.tennisworld.user.dto.RegistrationTennisUserRequestDto;
import ru.tennisworld.user.dto.TennisUserFullInfoResponseDto;
import ru.tennisworld.user.dto.TennisUserResponseDto;
import ru.tennisworld.user.dto.UpdateTennisUserRequestDto;

import java.util.List;

@RestController
@RequestMapping(path = "/user")
public interface TennisUserController {

    @GetMapping(path = "/reference-list")
    @ApiOperation("Получение списка пользователей по логинам")
    ResponseEntity<List<TennisUserResponseDto>> getUserReferenceList(
            @ApiParam("Список логинов пользователей")
            @NotNull @RequestParam List<String> usernameList
    );

    @GetMapping(path = "/{username}")
    @ApiOperation("Получение информации о пользователе")
    ResponseEntity<TennisUserFullInfoResponseDto> getUserInfo(
            @PathVariable("username") String username
    );

    @PostMapping(path = "/registration")
    @ApiOperation("Регистрация нового пользователя в системе")
    ResponseEntity<TennisUserResponseDto> registrationUser(
            @ApiParam("Запрос на создание пользователя в системе")
            @RequestBody RegistrationTennisUserRequestDto request
    );

    @PutMapping(path = "/{username}")
    @ApiOperation("Обновление основной информации о пользователе")
    ResponseEntity<TennisUserFullInfoResponseDto> updateUserMainInfo(
            @PathVariable("username") String username,
            @RequestBody UpdateTennisUserRequestDto request
    );
}
